using System;
using System.Collections.Generic;
using Autofac;

namespace ModuleManager
{
    /// <summary>
    /// 模模块顺序启动管理器模块
    /// </summary>
    public class ModuleManagerModule : Module
    {
        private readonly ICollection<Type> _moduleStartUpTypeCollection;


        /// <summary>
        /// 模块顺序启动管理器
        /// </summary>
        /// <param name="moduleStartUpTypeCollection">每个模块中的StartUp的启动顺序集合。模块中的每个IModuleStartUp的StartAsync函数会按照这个集合的顺序进行启动</param>
        public ModuleManagerModule(ICollection<Type> moduleStartUpTypeCollection)
        {
            _moduleStartUpTypeCollection = moduleStartUpTypeCollection;
        }

        protected override void Load(ContainerBuilder builder)
        {
            builder.Register(context => new ModuleManager(_moduleStartUpTypeCollection, context.Resolve<ILifetimeScope>()))
                .As<IModuleManager>()
                .SingleInstance();
        }
    }
}